import logging
import os
from logging.handlers import RotatingFileHandler
from config import Config

def setup_logger(name='biomni_app', config=None):
    """配置应用日志器
    
    Args:
        name: 日志器名称
        config: 配置对象，如果为None则使用默认Config
    
    Returns:
        配置好的日志器实例
    """
    if config is None:
        config = Config()
    
    # 日志格式：时间、级别、模块、消息
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(module)s - %(message)s')
    
    # 确保日志目录存在
    if not os.path.exists(config.LOG_DIR):
        os.makedirs(config.LOG_DIR)
    
    # 日志文件处理器
    file_handler = RotatingFileHandler(
        config.LOG_FILE,
        maxBytes=config.LOG_MAX_BYTES,
        backupCount=config.LOG_BACKUP_COUNT,
        encoding='utf-8'
    )
    file_handler.setFormatter(formatter)
    file_handler.setLevel(getattr(logging, config.LOG_LEVEL, logging.INFO))
    
    # 控制台处理器（开发环境）
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    console_handler.setLevel(logging.INFO)
    
    # 配置日志器
    logger = logging.getLogger(name)
    logger.setLevel(getattr(logging, config.LOG_LEVEL, logging.INFO))
    
    # 避免重复添加处理器
    if not logger.handlers:
        logger.addHandler(file_handler)
        if config.FLASK_DEBUG:  # 开发环境添加控制台输出
            logger.addHandler(console_handler)
    
    return logger

def get_logger(name='biomni_app'):
    """获取日志器实例
    
    Args:
        name: 日志器名称
    
    Returns:
        日志器实例
    """
    return logging.getLogger(name)